package com.cx.controller;

import com.cx.utils.BackUps;
import com.cx.utils.DatabaseTester;
import com.cx.utils.TimeTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.Date;

/**
 * @ClassName: TaskController
 * @Description:执行定时任务
 * @Author: cx
 * @Date: 2024/2/1 10:05
 **/
@RestController
public class TaskController {

    @Value("${spring.datasource.druid.username}")
    private String user;

    @Value("${spring.datasource.druid.password}")
    private String password;

    @Autowired
    private DatabaseTester databaseTester;

    /**
     * @return void
     * @Description //每天零点一秒备份sql文件到指定文件夹位置
     * @extra Cron表达式 "1 0 24 * * ?" 有些问题，因为小时字段（即第三个字段）的取值范围应该是0-23，而不包含24。
     * <p>
     * 如果你想要表示每天的午夜（即次日的0点0分1秒），你应该使用 "1 0 0 * * ?" 。这个表达式表示：
     * <p>
     * - `1`：秒（即在每分钟的第1秒）
     * - `0`：分钟（即在每小时的第0分钟，也就是每小时的开始）
     * - `0`：小时（即每天的第0小时，也就是每天的开始，即午夜）
     * - `*`：日（每天）
     * - `*`：月（每个月）
     * - `?`：周（不关心周几）
     * <p>
     * 因此，"1 0 0 * * ?" 表示每天的0点0分1秒执行任务。这个cron表达式遵循的是Quartz的cron格式，
     * 而不是Unix的cron格式。在Quartz的cron格式中，字段的顺序是秒、分、时、日、月、周，最后是年（可选）。在这个格式中，`?`表示不关心这个字段的值。
     * @Param No such property: code for class: Script1
     * @Date 2024/2/1 10:24
     * @Author cx
     **/

    //windows中运行
    // @Scheduled(cron = "0/25 * * * * ?") 每25秒运行一次
//   @Scheduled(cron = "1 0 0 * * ?")
//    public void sqlBackUp() {
//        System.out.println("scheduled表达式");
//        BackUps.backupDB(user, password, "pms", "C:\\java\\web\\mysqlBack.sql");
//    }
    //@Scheduled(cron = "0/25 * * * * ?")
    //@Scheduled(cron = "1 0 0 * * ?")
    public void sqlBackUp() {
        System.out.println("第一次测试");
        boolean connection = false;
        connection = databaseTester.testConnection();

        System.out.println("connection的值为："+connection);
        if(connection){
            BackUps.backupDB2(user, password, "pms", "/usr/local/web/backup/mysqlBack.sql");
        }else {
            System.out.println("数据库连接异常");
        }

    }

    /**
     * @Description //每六小时执行一次
     * 这个 @PostConstruct表示项目开始就执行该方法
     * @Date 2024/2/1 10:36
     * @Author cx
     **/
    //@PostConstruct
    public void businessNotice() {
        System.out.println("小飞棍来咯 ，项目执行出发，报告当前时间为 ===》" + new Date());
        TimeTask.backUpMysql01();
    }


    @PreDestroy
    public void stop() {
        System.out.println("项目停止啦======");
    }


    //@Scheduled(cron = "0/10 * * * * ?")
    public void text() {
        System.out.println("scheduled表达式test");
    }

    public static void main(String[] args) {
        BackUps.backupDB("root", "root", "pms", "C:\\java\\web\\mysqlBack.sql");
    }
}
